{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 第三周作业 在Rental Listing Inquiries数据上练习xgboost参数调优\n",
    "数据说明： Rental Listing Inquiries数据集是Kaggle平台上的一个分类竞赛任务，需要根据公寓的特征来预测其受欢迎程度（用户感兴趣程度分为高、中、低三类）。其中房屋的特征x共有14维，响应值y为用户对该公寓的感兴趣程度。评价标准为logloss。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "调整列采样比例和行采样比例参数"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "导入必要的包"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "from matplotlib import pyplot\n",
    "import seaborn as sns\n",
    "from xgboost import XGBClassifier\n",
    "import xgboost as xgb\n",
    "\n",
    "get_ipython().magic('matplotlib inline')\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "dpath = \"./data/\"\n",
    "train = pd.read_csv(dpath + \"RentListingInquries_FE_train.csv\")\n",
    "test = pd.read_csv(dpath + \"RentListingInquries_FE_test.csv\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "y_train = train['interest_level']\n",
    "train = train.drop(['interest_level'], axis=1)\n",
    "x_train = np.array(train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from sklearn.metrics import log_loss\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.model_selection import StratifiedKFold\n",
    "\n",
    "kfold = StratifiedKFold(n_splits=2, shuffle=True, random_state=2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'colsample_bytree': [0.7, 0.8], 'subsample': [0.3, 0.4]}"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "subsample = [0.3,0.4]\n",
    "colsample_bytree = [0.7,0.8]\n",
    "param_test3_1 = dict(subsample=subsample, colsample_bytree=colsample_bytree)\n",
    "param_test3_1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "xgb3_1 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=220,\n",
    "        max_depth=4,\n",
    "        min_child_weight=1,\n",
    "        gamma=0,\n",
    "        subsample=0.3,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel = 0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "GridSearchCV(cv=StratifiedKFold(n_splits=2, random_state=2, shuffle=True),\n",
       "       error_score='raise',\n",
       "       estimator=XGBClassifier(base_score=0.5, booster='gbtree', colsample_bylevel=0.7,\n",
       "       colsample_bytree=0.8, gamma=0, learning_rate=0.1, max_delta_step=0,\n",
       "       max_depth=4, min_child_weight=1, missing=None, n_estimators=220,\n",
       "       n_jobs=1, nthread=None, objective='multi:softprob', random_state=0,\n",
       "       reg_alpha=0, reg_lambda=1, scale_pos_weight=1, seed=3, silent=True,\n",
       "       subsample=0.3),\n",
       "       fit_params=None, iid=True, n_jobs=-1,\n",
       "       param_grid={'subsample': [0.3, 0.4], 'colsample_bytree': [0.7, 0.8]},\n",
       "       pre_dispatch='2*n_jobs', refit=True, return_train_score='warn',\n",
       "       scoring='neg_log_loss', verbose=0)"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gsearch3_1 = GridSearchCV(xgb3_1, param_grid = param_test3_1, scoring='neg_log_loss',n_jobs=-1, cv=kfold)\n",
    "gsearch3_1.fit(x_train , y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\model_selection\\_search.py:761: DeprecationWarning: The grid_scores_ attribute was deprecated in version 0.18 in favor of the more elaborate cv_results_ attribute. The grid_scores_ attribute will not be available from 0.20\n",
      "  DeprecationWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "([mean: -0.60017, std: 0.00009, params: {'colsample_bytree': 0.7, 'subsample': 0.3},\n",
       "  mean: -0.59743, std: 0.00017, params: {'colsample_bytree': 0.7, 'subsample': 0.4},\n",
       "  mean: -0.59957, std: 0.00062, params: {'colsample_bytree': 0.8, 'subsample': 0.3},\n",
       "  mean: -0.59782, std: 0.00017, params: {'colsample_bytree': 0.8, 'subsample': 0.4}],\n",
       " {'colsample_bytree': 0.7, 'subsample': 0.4},\n",
       " -0.59742613977376746)"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gsearch3_1.grid_scores_, gsearch3_1.best_params_, gsearch3_1.best_score_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'mean_fit_time': array([  770.66507947,  1002.22332382,   777.63197815,  1066.43449664]),\n",
       " 'mean_score_time': array([ 6.59837723,  8.02095878,  6.46987009,  7.49142838]),\n",
       " 'mean_test_score': array([-0.60016733, -0.59742614, -0.59957024, -0.59782252]),\n",
       " 'mean_train_score': array([-0.53461038, -0.53250313, -0.53295693, -0.53006717]),\n",
       " 'param_colsample_bytree': masked_array(data = [0.7 0.7 0.8 0.8],\n",
       "              mask = [False False False False],\n",
       "        fill_value = ?),\n",
       " 'param_subsample': masked_array(data = [0.3 0.4 0.3 0.4],\n",
       "              mask = [False False False False],\n",
       "        fill_value = ?),\n",
       " 'params': [{'colsample_bytree': 0.7, 'subsample': 0.3},\n",
       "  {'colsample_bytree': 0.7, 'subsample': 0.4},\n",
       "  {'colsample_bytree': 0.8, 'subsample': 0.3},\n",
       "  {'colsample_bytree': 0.8, 'subsample': 0.4}],\n",
       " 'rank_test_score': array([4, 1, 3, 2]),\n",
       " 'split0_test_score': array([-0.60025532, -0.5975959 , -0.59895247, -0.59764792]),\n",
       " 'split0_train_score': array([-0.53502332, -0.53274988, -0.53288302, -0.53028191]),\n",
       " 'split1_test_score': array([-0.60007933, -0.59725637, -0.60018807, -0.59799714]),\n",
       " 'split1_train_score': array([-0.53419744, -0.53225638, -0.53303083, -0.52985242]),\n",
       " 'std_fit_time': array([ 137.63387239,    1.41008067,  113.69100273,    1.53858805]),\n",
       " 'std_score_time': array([ 0.97105551,  0.2675153 ,  1.1055634 ,  0.33101892]),\n",
       " 'std_test_score': array([  8.79976493e-05,   1.69765747e-04,   6.17803586e-04,\n",
       "          1.74613400e-04]),\n",
       " 'std_train_score': array([  4.12935638e-04,   2.46748288e-04,   7.39053949e-05,\n",
       "          2.14743120e-04])}"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gsearch3_1.cv_results_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best: -0.597426 using {'colsample_bytree': 0.7, 'subsample': 0.4}\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    }
   ],
   "source": [
    "print(\"Best: %f using %s\" % (gsearch3_1.best_score_, gsearch3_1.best_params_))\n",
    "test_means = gsearch3_1.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = gsearch3_1.cv_results_[ 'std_test_score' ]\n",
    "train_means = gsearch3_1.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = gsearch3_1.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "pd.DataFrame(gsearch3_1.cv_results_).to_csv(dpath + 'my_preds_subsampleh_colsample_bytree_1.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x81fe358>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "test_scores = np.array(test_means).reshape(len(colsample_bytree), len(subsample))\n",
    "train_scores = np.array(train_means).reshape(len(colsample_bytree), len(subsample))\n",
    "\n",
    "for i, value in enumerate(colsample_bytree):\n",
    "    pyplot.plot(subsample, -test_scores[i], label= 'test_colsample_bytree:'   + str(value))\n",
    "    \n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'subsample' )                                                                                                      \n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "pyplot.savefig( dpath + 'subsample_vs_colsample_bytree1.png' )"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
